// 华为技术面真题

/**
给你一个整数 n 。请你先求出从 1 到 n 的每个整数 10 进制表示下的数位和（每一位上的数字相加），然后把数位和相等的数字放到同一个组中。

请你统计每个组中的数字数目，并返回数字数目并列最多的组有多少个。


输入：n = 13
输出：4
解释：总共有 9 个组，将 1 到 13 按数位求和后这些组分别是：
[1,10]，[2,11]，[3,12]，[4,13]，[5]，[6]，[7]，[8]，[9]。总共有 4 个组拥有的数字并列最多。
示例 2：

输入：n = 2
输出：2
解释：总共有 2 个大小为 1 的组 [1]，[2]。
示例 3：

输入：n = 15
输出：6
示例 4：

输入：n = 24
输出：5
 
提示：
1 <= n <= 10^4
 * 
 * 
 */

function maxGroup(n) {
    let arr = new Array(n).fill(0).map((_, i) => i + 1);
    let res = new Map();
    let maxLen = -Infinity;
    for (let i = 0; i < arr.length; i++) {
        let num = '' + arr[i];
        let sum = 0;
        for (let j = 0; j < num.length; j++) {
            sum += parseInt(num[j]);
        }

        if (res.has(sum)) {
            res.get(sum).push(arr[i]);
            maxLen = Math.max(res.get(sum).length, maxLen);
        } else {
            res.set(sum, [arr[i]]);
            maxLen = Math.max(1, maxLen);
        }
    }

    const filterArr = [...res].filter((ele) => ele[1].length === maxLen);

    console.log(
        `${n} for count: ${filterArr.length}, arr: ${JSON.stringify(filterArr)}`
    );

    return filterArr.length;
}

maxGroup(13); // 4
maxGroup(2); // 2
maxGroup(15); // 6
maxGroup(24); // 5
